'use strict';
/*
module.exports = appInfo => {
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1542036514687_757';

  // add your config here
  config.middleware = [];

  return config;
};
*/

// 读取配置项
// controller 和 service 中，this.config.keys 即可；




exports.keys = "CookieSecureString";

// session 的 cookie
exports.key = "SessionCookienName";
exports.maxAge = 86400000;// 一天，毫秒；
exports.httpOnly = true;
exports.encrypt = true;

// // 取消 CSRF 验证（egg-security 模块提供的功能），默认是启用的；
exports.security = {
  // domainWhiteList: ['.domain.com'],
  csrf: false, // 这个也是可以的；
  // csrf: {
  //   // 判断是否需要 ignore 的方法，请求上下文 context 作为第一个参数
  //   ignore: ctx => isInnerIp(ctx.ip),
  //   queryName: '_csrf',
  //   bodyName: '_csrf'
  // },
  // xframe: {
  //   enable: false
  // },
  // // Content Security Policy
  // csp: {
  //   match: '/example',
  //   policy: {
  //     // 
  //   }
  // }
};

// // 当表单中有上传文件时，最简单的做法是设置为 file 模式；
// // 虽然我们可以使用 stream 模式，但会增加工作量 -- 而且有限制：文件控件必须位于所有控件的最后；
exports.multipart = {
  mode: 'file',
  // fileExtensions: ['.apk'],// 在已支持类型的文件基础上，添加其他类型文件的支持；
  // whitelist: ['.png']// 覆盖，也就说只能上传 .png 的文件，其他任何文件都不再支持；当有此设置，fileExtensions 无效。
};

// // 跳转 bodyParser 中间件对请求体的限制；默认二者的值都是 100kb；如果超出，响应 413；解析失败响应 400；
// module.exports = {
//   bodyParser: {
//     jsonLimit: '1mb',
//     formLimit: '1mb',
//   },
// };

// 添加 view 配置
exports.view = {
  defaultViewEngine: 'nunjucks',
  defaultExtension: '.html',
  // root: ['',''].join(','),
  mapping: {
    '.html': 'nunjucks'
  },
};

exports.onerror = {
  // 线上页面发生异常时，重定向到这个页面上
  errorPageUrl: '/50x.html'
};

exports.notfound = {
  pageUrl: '/50x.html'
};

// 覆盖插件的默认配置
exports.mysql = {
  client: {
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: 'root',
    database: 'test',
  },
  // 是否加载到 app 上，默认开启
  app: true,
  // 是否加载到 agent 上，默认关闭
  agent: false,
};

// exports.news = {
//   pageSize: 5,
//   serverUrl: 'http://127.0.0.1:7001', // 请求一个json文件
// };


// ***************************************
// 请求头相关
// 
// 当设置为 true，有些 header 的 Getter 的处理会发生变化；
// exports.proxy = true;
// 
// 当proxy=true时，ctx.host 优先读取 x-forwarded-host 的值，如果没有再尝试读取 host 的值。
// exports.hostHeaders = 'x-forwarded-host';
// 
// ctx.protocol 首先判断是否是加密连接，是则返回 https；非加密连接时，当proxy=true时，依据 x-forwarded-proto 的值判断 HTTP 还是 https；
// 如果读取不到，可以配置 protocol 作为兜底值；
// exports.protocolHeaders = 'x-forwarded-proto';
// exports.protocol = 'HTTP';
// 
// ctx.ips 获取请求经过所有的中间设备 IP 地址列表，只有在 config.proxy = true 时，才会通过读取 config.ipHeaders 中配置的 header 的值来获取，获取不到时为空数组。
// exports.ipHeaders = 'x-forwarded-for';
// 
// ctx.ip 
// 通过 ctx.ip 获取请求发起方的 IP 地址，优先从 ctx.ips 中获取，ctx.ips 为空时使用连接上发起方的 IP 地址。
// ip 和 ips 不同，ip 当 config.proxy = false 时会返回当前连接发起者的 ip 地址，ips 此时会为空数组。
// 
// ***************************************



// 这里一开始是使用中间件的形式添加 loog和log 等方法，后来想想不好，应该在 app.js 内添加；
// 因为中间件时请求级别的，每次请求都会执行一次，都要添加一次，肯定是浪费的。
// 所以在整个项目启动时添加是最合理的。
exports.middleware = [
  'console' // 尽管这里注释掉了，但 app/middleware/console.js 内的最开头代码还是执行了；
];


// exports.logger = {
//   dir: '/home/admin/logs/demoapp',
//   level: 'DEBUG',
// };